﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MvcApplication2.Models;

namespace MvcApplication2.Controllers
{
    /// <summary>
    /// Classe view model per view :
    ///  - SendProposal.
    ///  - SendMessage
    ///  - e altre visto dove si mandano mess..
    /// Eredito da user message.
    /// Aggiungo lista dei messaggi correlati 
    /// </summary>
    public class UserMessageViewModel : UserMessage
    {
        public UserMessageViewModel()
        {
            PreviousMessages = new List<UserMessageViewModel>();
        }
        //Lista dei messaggi precedenti della discussione 
        public ICollection<UserMessageViewModel> PreviousMessages { get; set; }
        // Lista messaggi precedenti..

        public int DestinationId { get; set; }

        /// <summary>
        /// Me  - se utente sono io
        /// NomeUtente - se utente non sono io
        /// </summary>
        public string FormattedFrom { get; set; }

        /// <summary>
        /// Me  - se utente sono io
        /// NomeUtente - se utente non sono io
        /// </summary>
        public string FormattedDestination { get; set; }

        public string FormattedTitle { get; set; }

        public string FormattedType { get; set; }

        //public DateTime LastMessageDate { get; set; }

        public string FormattedTo { get; set; }

        public string FormattedMessage { get; set; }

        public bool IsNew { get; set; }

        /// <summary>
        /// Se è ancora in proposta posso :
        /// - accettare
        /// - rifiutare
        /// - trattare prezzo
        /// Vale sia per tester che per dev
        /// </summary>
        public bool IsProposal
        {
            get { return ExerciseStatus == Models.ExerciseStatusType.ProposalActive; }
        }

        public bool IsTesterSide { get; set; }

        public bool ShowPayButton
        {
            get { return !IsTesterSide && ExerciseStatus == Models.ExerciseStatusType.WaitingPayment; }
        }
        //public bool ShowAcceptButton
        //{
        //    get
        //    {
        //        var case1 = IsTesterSide && LastBidFrom == "dev";
        //        var case2 = !IsTesterSide && LastBidFrom == "tester";

        //        return IsProposal && (case1 || case2);
        //    }
        //}
        /// <summary>
        /// Mostro pulsante per accettare lavoro quando lo status è in "proposta" e l'ultimo messaggio è stato inviato da altro utente.
        /// </summary>
        public bool ShowAcceptButton
        {
            get
            {
                return IsProposal && IsNew;
            }
        }

        public bool ShowVoteUser
        {
            get { return ExerciseStatus == Models.ExerciseStatusType.Completed; }
        }
        public string GetLabelClass
        {
            get
            {
                switch (ExerciseStatus)
                {
                    case Models.ExerciseStatusType.Rejected:
                        return "label-inverse";

                    case Models.ExerciseStatusType.ProposalActive:
                        return "label-info";

                    case Models.ExerciseStatusType.Completed:
                        return "label-success";

                    case Models.ExerciseStatusType.WaitingPayment:
                    case Models.ExerciseStatusType.WaitingTest:
                        return "label-important";
                }
                return string.Empty;

            }

        }
        public string GetLocalizedStatusMessage
        {
            get
            {
                switch (ExerciseStatus)
                {
                    case Models.ExerciseStatusType.ProposalActive:
                        return "Proposta";

                    case Models.ExerciseStatusType.Completed:
                        return "Completato";

                    case Models.ExerciseStatusType.WaitingPayment:
                        return "In Attesa di pagamento";

                    case Models.ExerciseStatusType.WaitingTest:
                        return "In attesa di test";

                    case Models.ExerciseStatusType.Rejected:
                        return "Rifiutato";
                }

                return string.Empty;
            }

        }
        //public string GetLabel
        //    var labelclass = 
        //     switch (item.TesterExerciseStatus)
        //     {
        //         case (byte) MvcApplication2.Models.TesterExerciseStatus.Proposal:
        //             {

        //             }

        //     }
        //    }

        public string FormattedDate { get; set; }
    }

    public class MyMessageListViewModel
    {
        public MyMessageListViewModel()
        {
            Messagges = new List<UserMessageViewModel>();
        }
        public ICollection<UserMessageViewModel> Messagges { get; set; }
    }
}